package operator.function;

import java.util.concurrent.TimeUnit;

import io.reactivex.Observable;
import util.RxJavaHelper;
import util.ThreadHelper;

class TimeoutOperator {

    public static void main(String[] args) {
//        timeout1();
        timeout2();
    }

    /**
     * 指定的一段时长没有发射任何数据，Timeout操作符会以一个onError通知终止这个Observable
     */
    static void timeout1() {
        Observable.intervalRange(0, 10, 0, 1, TimeUnit.SECONDS)
                .timeout(1, TimeUnit.SECONDS)
                .subscribe(RxJavaHelper.getConsumer());
        ThreadHelper.sleep();
    }

    /**
     * 指定的一段时长没有发射任何数据，切换到备用Observable
     */
    static void timeout2() {
        Observable.intervalRange(0, 10, 2, 1, TimeUnit.SECONDS)
                .timeout(1, TimeUnit.SECONDS, Observable.just(11l))
                .subscribe(RxJavaHelper.getConsumer());
        ThreadHelper.sleep();
    }


}
